package com.murilo.atividade.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import com.murilo.atividade.model.Contas;
import com.murilo.atividade.model.Pessoa;

public class ContasDao {	
	private static final String LIST = "select * from conta where cd_pessoa = ?";
	private static final String LISTID = "select * from conta where CD_PESSOA = ? and CD_CONTA = ?";
	private static String EDITAR = "update conta set VL_CONTA =?, VL_PRESTACAO_CONTA= ?, QTD_PRESTACAO_CONTA= ? where CD_CONTA= ? and CD_PESSOA=?";
	private static String INSERT = "insert into conta (CD_CONTA,CD_PESSOA,VL_CONTA,VL_PRESTACAO_CONTA,QTD_PRESTACAO_CONTA) values(cd_seq_contas.nextval,?,?,?,?)";
	private static final String DELETE = "delete from conta where cd_pessoa = ? and cd_conta = ?";
	
	//"CD_CONTA" 	"CD_PESSOA" "VL_CONTA" 	"VL_PRESTACAO_CONTA" 	"QTD_PRESTACAO_CONTA" 	
	public List<Contas> listar(int cdPessoa){
		Connection con = null;
		try {
			con = Conexao.getConexao();
			PreparedStatement pstm = con.prepareStatement(LIST);
			pstm.setInt(1, cdPessoa);
			ResultSet rs = pstm.executeQuery();
			List<Contas> contas = new ArrayList();
			while(rs.next()){
				Contas co = new Contas();
				co.setCdConta(rs.getInt("CD_CONTA"));
				co.setVlConta(rs.getDouble("VL_CONTA"));
				co.setVlPrestacao(rs.getDouble("VL_PRESTACAO_CONTA"));
				co.setQtdPrestacoes(rs.getInt("QTD_PRESTACAO_CONTA"));
				contas.add(co);
			}
			return contas;
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro ao listar as Contas." + e.getMessage());
		}finally{
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}return null;
	}
	
	public void inserir(Contas co){
		Connection con = null;
		try {
			con = Conexao.getConexao();
			PreparedStatement pstm = con.prepareStatement(INSERT);
			pstm.setInt(1, co.getCdPessoa());
			pstm.setDouble(2, co.getVlConta());
			pstm.setDouble(3, co.getVlPrestacao());
			pstm.setInt(4, co.getQtdPrestacoes());
			pstm.execute();
			JOptionPane.showMessageDialog(null, "Conta inserida corretamente.");
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro ao inserir conta na Base de dados." + e.getMessage());
		}finally{
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	
	}
	
	public void editar(Contas co){
		Connection con = null;
		try {
			con = Conexao.getConexao();
			PreparedStatement pstm = con.prepareStatement(EDITAR);
			pstm.setDouble(1, co.getVlConta());
			pstm.setDouble(2, co.getVlPrestacao());
			pstm.setInt(3, co.getQtdPrestacoes());
			pstm.setInt(4, co.getCdConta());
			pstm.setInt(5, co.getCdPessoa());
			pstm.execute();
			JOptionPane.showMessageDialog(null, "Conta atualizada corretamente.");
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro ao atualizar uma Conta na base de dados." + e.getMessage());
		}finally{
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public boolean excluir(int cdpessoa,int cdconta){
		Connection con = null;
		try {
			con = Conexao.getConexao();
			PreparedStatement pstm = con.prepareStatement(DELETE);
			pstm.setInt(1, cdpessoa);
			pstm.setInt(2, cdconta);
			pstm.execute();
			JOptionPane.showMessageDialog(null, "Conta excluida corretamente.");
			return true;
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro ao excluir a conta na base de dados." + e.getMessage());
		}finally{
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}return false;
	}

	public Contas listarId(int cdpessoa, int codconta) {
		Connection con = null;
		try {
			con = Conexao.getConexao();
			PreparedStatement pstm = con.prepareStatement(LISTID);
			pstm.setInt(1, cdpessoa);
			pstm.setInt(2, codconta);
			ResultSet rs = pstm.executeQuery();
			Contas  conta = new Contas();
			while(rs.next()){
				conta.setCdPessoa(rs.getInt("cd_pessoa"));
				conta.setCdConta(rs.getInt("cd_conta"));
				conta.setVlConta(rs.getDouble("VL_CONTA"));
				conta.setVlPrestacao(rs.getDouble("VL_PRESTACAO_CONTA"));
				conta.setQtdPrestacoes(rs.getInt("QTD_PRESTACAO_CONTA"));
			}
			return conta;
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro ao listar a conta." + e.getMessage());
		}finally{
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}return null;
	}

}
